#include "logger.h"

#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <unistd.h>
#include <errno.h>
#include <string.h>

//通过环境变量来设置日志级别

Logger::Logger() {
    if (!getenv("LOG_LEVEL")) {
        m_level = INFO;
    } else {
        //可加断言，因为getenv("LOG_LEVEL")的返回值，一定是"INFO" "ERROR" "DEBUG" "FATAL" 这4种里面的
        m_level = logLevelType[getenv("LOG_LEVEL")];
    }

    m_logToLogFile = true;
    m_logToTerminal = true;
} 


void Logger::SetLogToTerminal(bool logToTerminal) {
    m_logToTerminal = logToTerminal;
}

bool Logger::GetLogToTerminal() const {
    return m_logToTerminal;
}

void Logger::SetLogToLogFile(bool logToLogFile) {
    m_logToLogFile = logToLogFile;
}

bool Logger::GetLogToLogFile() const {
    return m_logToLogFile;
}

void Logger::SetLogLevel(LOG_LEVEL level) {
    m_level = level;
}
LOG_LEVEL Logger::GetLogLevel() const {
    return m_level;
}

//文件 dsf.log
void Logger::SetLogFile(const std::string& logFileName) {
    if (m_logFile.is_open()) {
        m_logFile.close();
    }
    m_logFile.open(logFileName);
    m_logToLogFile = true;
}


// int main()
// {
//     LOG_INFO << "hello1";
//     LOG_ERROR << "hello2";
//     LOG_DEBUG << "hello3";
//     LOG_FATAL << "hello4";
//     LOG_INFO << "hello5";


//     return 0;
// }

/*
int main()
{
    // api -> linux 系统调用接口 
    // errno:msg想像这样用key：value输出msg -> perror("XXXX")   使用strerror库函数, char* strerror(int errno);
    // errno的值，是调用系统函数后，内核自己设置，可以直接使用
    // socket listen accept connect
   
    int res = open("./a.txt", O_RDONLY, 0664);
    if (-1 == res) {
        //perror("open()");
        LOG_ERROR << strerror(errno);   //<strerror库函数
    }

}
*/